using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Data.Core.Plugins;
using Avalonia.Markup.Xaml;
using CommunityToolkit.Mvvm.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using MinecraftEnchantCalculator.Abstractions;
using MinecraftEnchantCalculator.Core;
using MainWindow = MinecraftEnchantCalculator.Views.Windows.MainWindow;
using MainWindowViewModel = MinecraftEnchantCalculator.ViewModels.Windows.MainWindowViewModel;

namespace MinecraftEnchantCalculator;

public class App : Application
{
  public override void Initialize()
  {
    AvaloniaXamlLoader.Load(this);
  }

  public override void OnFrameworkInitializationCompleted()
  {
    if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) {
      // Line below is needed to remove Avalonia data validation.
      // Without this line you will get duplicate validations from both Avalonia and CT
      BindingPlugins.DataValidators.RemoveAt(0);
      // desktop.MainWindow = new MainWindow {
      //   DataContext = new MainWindowViewModel(),
      // };
      Ioc.Default.ConfigureServices(new ServiceCollection()
        .AddSingleton<IAnvil, AnvilTree>()
        .AddSingleton<MainWindow>()
        .AddSingleton<MainWindowViewModel>()
        .BuildServiceProvider());

      desktop.MainWindow = Ioc.Default.GetRequiredService<MainWindow>();
    }

    base.OnFrameworkInitializationCompleted();
  }
}